"""
类属性是所有实例共享的属性
实例属性是各个实例自己维护的属性，不同实例之间不共享

# 类属性只能通过类对象修改，不能通过实例修改，
# 通过实例修改的意义是：给这实例创建了一个 实例属性
# 但是在java里面好像是可以的通过实例去修改类属性的


"""
class Dog():
    # 直接写就是一个类属性，所有实例共享
    tooth = 10

    def __init__(self):
        # 这个是一个实例属性，各个实例自己维护，不同实例之间不共享
        self.age = 10

    def showTooth(self):
        print(self.tooth) #实例属性只能被实例方法所使用 ！！！！！

print("-------------- 类属性 ---------------")
dog1 = Dog()
dog2 = Dog()
print(Dog.tooth)
print(dog1.tooth)
print(dog2.tooth)

# 类属性只通过类对象修改
print("让类属性-1")
Dog.tooth -= 1
print(Dog.tooth)
print(dog1.tooth)
print(dog2.tooth)

# 类属性只能通过类对象修改，不能通过实例修改，
# 通过实例修改的意义是：给这实例创建了一个 实例属性
print("我使用实例修改类属性")
dog1.tooth = 22 # 等于是给dog1，这个实例添加了一个tooth的属性
print(Dog.tooth) # 9
print(dog1.tooth) # 22
print(dog2.tooth) # 9


print("-------------- 实例属性 ---------------")
""" 这种方式定义的就是实例属性
    def __init__(self):
        # 这个是一个实例属性，各个实例自己维护，不同实例之间不共享
        self.age = 10
"""
# 实例属性只能通过实例对象去访问，不能通过类对象去访问
#print(Dog.age) 实例属性不能通过类对象访问
print(dog1.age)
print(dog2.age)

# 会发现只有dog1的age变了，说明实例属性之间不共享
dog1.age = 12
print(dog1.age)
print(dog2.age)